package cn.dglydrpy.study.algorithm.od;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

/**
 * @author Yyy
 * @date 2024/11/7 9:26
 * @description  计算给定数组中最大 N 个数与最小 N 个数的和，需对数组去重，
 * 最大最小 N 个数不能重叠，否则输入非法返回 -1
 * 
 输入：
 5
 95 88 83 64 100
 2
 输出：
 342
 
 输入：
 5
 3 2 3 4 2
 2
 输出：
 -1
 */
public class Od0016_SumMaxMinTopNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()){
            int n = Integer.valueOf(scanner.nextLine());
            String[] split = scanner.nextLine().split(" ");
            int[] arr = new int[n];
            for(int i = 0;i<n;i++){
                arr[i] = Integer.valueOf(split[i]);
            }
            int topN = Integer.valueOf(scanner.nextLine());

            int ans = myAnswer(n,arr,topN);
            System.out.println(ans);

            int answer1 = answer1(n,arr,topN);
            System.out.println(answer1);
        }
        
        
    }

    private static int myAnswer(int n, int[] arr, int topN) {

        int ans = -1;
        
        if(2*topN > n){
            return ans;
        }
        
        ArrayList<Integer> list = new ArrayList<>();
        for(int a : arr){
            if(!list.contains(a)){
                list.add(a);
            }
        }
        if(2*topN > list.size()){
            return ans;
        }

        Collections.sort(list);
        ans = 0;
        for(int i = 0; i<list.size();i++){
            if(i < topN){
                ans += list.get(i);
            }
            if(i >= n - topN){
                ans += list.get(i);
            }
        }
        
        
        return ans;
    }


    public static int answer1(int n, int[] arr, int topN) {

        // 去重
        int[] uniqueNums = Arrays.stream(arr).distinct().toArray();
        Arrays.sort(uniqueNums);

        if (2 * topN > uniqueNums.length) {
            return -1;
        }

        int minSum = 0;
        int maxSum = 0;
        for (int i = 0; i < topN; i++) {
            minSum += uniqueNums[i];
            maxSum += uniqueNums[uniqueNums.length - 1 - i];
        }

        return minSum + maxSum;
    }
}
